package modelo;

import java.util.List;

import fiuba.algo3.titiritero.modelo.GameLoop;
import vista.VistaEscenario;
import vista.VistaJuego;
import vista.VistaNave;
public class Juego{
	

private List<Nave> listaDeNaves;
private Escenario escenario;
private GameLoop controlador;
private VistaEscenario vistaEscenario;
private VistaJuego vistaJuego;
public static final String DIR_IMG = "res/";
public static final int ESCALA_DE_LOS_GRAFICOS = 10;
public static final int WIDHT_WINDOWS = VistaEscenario.WIDHT_ESCENARIO + 300;
public static final int HEIGHT_WINDOWS = VistaEscenario.HEIGHT_ESCENARIO + 100;


	public Juego (){
				
	}
    
	public int getTurnoActual(){
		
		return this.escenario.getTurnoActual();
		
	}
	
	private void creacionDeEscenario(List <Nave> naves){
	   this.escenario = new Escenario(naves);
	   this.vistaEscenario = new VistaEscenario();	
    }

    private List<Nave> cargarNaves(){  	
    	//Se genera una flota standrad.
    	GeneradorDeFlota generador = new GeneradorDeFlotaStandard();
    	return generador.generarFlota();	
    }

    private void agregarListaDeNavesAlJuego(List<Nave> naves, GameLoop gameLoop){
    	// Incorporo la instacia de Nave al controlador del Juego, junto con su vista
    	for (int i = 0; i<naves.size();i++){
    			gameLoop.agregar(naves.get(i));
    			VistaNave.dibujar(naves.get(i),gameLoop);
    	}		
    }
    


	public void agregarUnaMunicionAlJuego(Municion municion) throws PuntajeInsuficienteException
	{
	
		int costoMunicion = municion.getCosto();
		
		if(costoMunicion <= this.escenario.getPuntaje()){	
		
			this.escenario.reducirPuntaje(costoMunicion);
			this.escenario.agregarMunicion(municion);
		
		}
		
		else throw new PuntajeInsuficienteException();
		
	}
    
	
	public int getPuntaje(){
		
		return this.escenario.getPuntaje();
		
	}
  
	
	public void setup(){		
		this.listaDeNaves = this.cargarNaves();
		this.creacionDeEscenario(this.listaDeNaves);
		this.controlador = new GameLoop (vistaEscenario);
		this.vistaJuego = new VistaJuego(this,this.controlador);
		this.vistaJuego.agregarVista(vistaEscenario);
	    this.controlador.agregar(escenario);
		this.agregarListaDeNavesAlJuego(this.listaDeNaves, this.controlador);
		
		}
	
	public static void main(String[] args) {
		new Juego().setup();
	}
	
} 